package org.common.dao;

import java.util.List;

/**
 * DAO(Data Access Object)是一个数据访问接口，数据访问：顾名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间。
 * <p>
 * 在核心J2EE模式中是这样介绍DAO模式的：为了建立一个健壮的J2EE应用，应该将所有对数据源的访问操作抽象封装在一个公共API中。
 * 用程序设计的语言来说，就是建立一个接口，接口中定义了此应用程序中将会用到的所有事务方法。
 * 在这个应用程序中，当需要和数据源进行交互的时候则使用这个接口，并且编写一个单独的类来实现这个接口在逻辑上对应这个特定的数据存储.
 * <p>
 * 简单来说,就是定义一个接口,规定一些增删改查的方法,然后交给实现类去实现, 它介于数据库和业务逻辑代码之间,
 * 这样当我们需要操作数据库时,根据接口定义的API去操作数据库就可以了。每个方法都是一个原子性的操作,例如：增加、修改、删除等
 * <p>
 * DAO模式要求项目必须具备这样几个结构：
 * 1、实体类：和数据库表格一一对应的类,单独放入一个包中,包名往往是 pojo/entity,要操作的每个表格都应该有对应的实体类
 * 2、DAO层：定义了对数据要执行那些操作的接口和实现类,包名往往是 dao/mapper,要操作的每个表格都应该有对应的接口和实现类
 * 不过在 Mybatis 中,由于其对DAO层代码进行了封装,所以代码编写方式会有些许变化
 * <p>
 * 在三层结构中,分开业务层表示层（UI）、业务逻辑层（BLL）和数据访问层（DAL）(Data Access Layer)
 * 而所谓的DAO(Data Access Object)就是数据访问对象的意思,负责对数据库的增删改查操作
 *
 * @author yexi
 */
public interface IBaseDAO<T> {

    /**
     * 插入方法
     *
     * @param entity
     * @return
     */
    int insert(T entity);

    /**
     * 删除方法
     *
     * @param id
     * @return
     */
    int deleteById(Long id);

    /**
     * 修改方法
     *
     * @param entity
     * @return
     */
    int updateById(T entity);

    /**
     * 查询方法
     *
     * @param id
     * @return
     */
    T selectById(Long id);

    /**
     * 查询所有
     *
     * @return
     */
    List<T> selectAll();

    /**
     * 查询总数
     *
     * @return
     */
    int selectCount();
}
